let bluetooth = {}

/**
 * 是否授权蓝牙（兼容微信小程序，其他平台未做兼容）
 * @date 2022-12-08
 */
bluetooth.isAuth = function() {
	return new Promise((resolve, reject) => {
		// #ifdef MP-WEIXIN
		uni.getSetting({
			success(res) {
				// 没有蓝牙权限
				if (!res.authSetting['scope.bluetooth']) {
					// 提前向用户发起授权请求
					uni.authorize({
						scope: 'scope.bluetooth',
						success(res) {
							console.log('--请求权限成功--', res)
							resolve(true)
						},
						fail(res) {
							console.log('--请求权限失败--', res)
							uni.showModal({
								title: "您已拒绝蓝牙权限",
								content: "是否进入权限管理，调整授权？",
								success(res) {
									if (res.confirm) {
										// 打开设置界面，引导用户开启授权
										uni.openSetting({
											success(res) {
												reject(false)
											}
										})
									} else {
										reject(false)
									}
								}
							})
						},
						complete(res) {
							// console.log('authorizeComplete', res)
						}
					})
				} else {
					resolve(true)
				}
			}
		})
		// #endif
	})
}

/**
 * 初始化蓝牙
 * @date 2022-12-08
 */
bluetooth.init = function() {
	return new Promise((resolve, reject) => {
		// 初始化蓝牙
		uni.openBluetoothAdapter({
			success(res) {
				console.log('--初始化蓝牙成功--', res)
				resolve(res)
			},
			fail(err) {
				console.log('--初始化蓝牙失败--', err)
				reject(err)
			}
		})
	})
}

/**
 * 开始搜寻附近的蓝牙外围设备
 * @param {array} services 要搜索的蓝牙设备主 service 的 uuid 列表
 * @date 2022-12-08
 */
bluetooth.startDiscovery = function(services = []) {
	return new Promise((resolve, reject) => {
		// 开始搜寻附近的蓝牙外围设备
		uni.startBluetoothDevicesDiscovery({
			services: services,
			success(res) {
				console.log('--开始搜寻附近的蓝牙外围设备成功--', res)
				resolve(res)
			},
			fail(err) {
				console.log('--开始搜寻附近的蓝牙外围设备失败--', err)
				reject(err)
			}
		})
	})
}

/**
 * 停止搜寻附近的蓝牙外围设备
 * @date 2022-12-08
 */
bluetooth.stopDiscovery = function() {
	return new Promise((resolve, reject) => {
		// 停止搜寻附近的蓝牙外围设备
		uni.stopBluetoothDevicesDiscovery({
			success(res) {
				console.log('--停止搜寻附近的蓝牙外围设备成功--', res)
				resolve(res)
			},
			fail(err) {
				console.log('--停止搜寻附近的蓝牙外围设备失败--', err)
				reject(err)
			}
		})
	})
}

/**
 * 获取在蓝牙模块生效期间所有已发现的蓝牙设备
 * @date 2022-12-08
 */
bluetooth.getDevices = function() {
	return new Promise((resolve, reject) => {
		// 获取在蓝牙模块生效期间所有已发现的蓝牙设备
		uni.getBluetoothDevices({
			success(res) {
				console.log('--获取在蓝牙模块生效期间所有已发现的蓝牙设备成功--', res)
				resolve(res)
			},
			fail(err) {
				console.log('--获取在蓝牙模块生效期间所有已发现的蓝牙设备失败--', err)
				reject(err)
			}
		})
	})
}

/**
 * 根据 uuid 获取处于已连接状态的设备
 * @date 2022-12-08
 */
bluetooth.getConnectedBluetoothDevices = function(services = []) {
	return new Promise((resolve, reject) => {
		// 根据 uuid 获取处于已连接状态的设备
		uni.getConnectedBluetoothDevices({
			services: services,
			success(res) {
				console.log('--获取处于已连接状态的设备成功--', res)
				resolve(res)
			},
			fail(err) {
				console.log('--获取处于已连接状态的设备失败--', err)
				reject(err)
			}
		})
	})
}

/**
 * 连接低功耗蓝牙设备
 * @param {string} deviceId 设备ID
 * @date 2022-12-30
 */
bluetooth.createBLEConnection = function(deviceId) {
	return new Promise((resolve, reject) => {
		// 连接低功耗蓝牙设备
		uni.createBLEConnection({
			deviceId: deviceId,
			success(res) {
				console.log('--连接低功耗蓝牙设备成功--', res)
				resolve(res)
			},
			fail(err) {
				console.log('--连接低功耗蓝牙设备失败--', err)
				reject(err)
			}
		})
	})
}

export default bluetooth
